<?php
/**
 * @Author: Veris
 * @Date:   2016-04-19 22:14:57
 * @Last Modified by:   Veris
 * @Last Modified time: 2016-04-19 22:15:28
 */
    class Upload{

        
        
        /**
         * 检查上传的文件
         * @param array $file 文件信息
         */
        private function check($file) {
            /* 文件上传失败，捕获错误代码 */
            if ($file['error']) {
                $this->error($file['error']);
                return false;
            }

            /* 无效上传 */
            if (empty($file['name'])){
                $this->error = '未知上传错误！';
            }

            /* 检查是否合法上传 */
            if (!is_uploaded_file($file['tmp_name'])) {
                $this->error = '非法上传文件！';
                return false;
            }

            /* 检查文件大小 */
            if (!$this->checkSize($file['size'])) {
                $this->error = '上传文件大小不符！';
                return false;
            }

            /* 检查文件Mime类型 */
            //TODO:FLASH上传的文件获取到的mime类型都为application/octet-stream
            if (!$this->checkMime($file['type'])) {
                $this->error = '上传文件MIME类型不允许！';
                return false;
            }

            /* 检查文件后缀 */
            if (!$this->checkExt($file['ext'])) {
                $this->error = '上传文件后缀不允许';
                return false;
            }

            /* 通过检测 */
            return true;
        }


        /**
         * 获取错误代码信息
         * @param string $errorNo  错误号
         */
        private function error($errorNo) {
            switch ($errorNo) {
                case 1:
                    $this->error = '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值！';
                    break;
                case 2:
                    $this->error = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值！';
                    break;
                case 3:
                    $this->error = '文件只有部分被上传！';
                    break;
                case 4:
                    $this->error = '没有文件被上传！';
                    break;
                case 6:
                    $this->error = '找不到临时文件夹！';
                    break;
                case 7:
                    $this->error = '文件写入失败！';
                    break;
                default:
                    $this->error = '未知上传错误！';
            }
        }

        /**
         * 检查文件大小是否合法
         * @param integer $size 数据
         */
        private function checkSize($size) {
            return !($size > $this->maxSize) || (0 == $this->maxSize);
        }

        /**
         * 检查上传的文件MIME类型是否合法
         * @param string $mime 数据
         */
        private function checkMime($mime) {
            return empty($this->config['mimes']) ? true : in_array(strtolower($mime), $this->mimes);
        }

        /**
         * 检查上传的文件后缀是否合法
         * @param string $ext 后缀
         */
        private function checkExt($ext) {
            return empty($this->config['exts']) ? true : in_array(strtolower($ext), $this->exts);
        }

    }